define(function(require, exports, module) {
  var $ = require('$');
  var formcc = require('form');
  var nav = require("bootstrap_nav");
  var bootbox = require("bootbox");
  var loader = require("./loader/loader");
  var theme = require('bootstrap_theme');
  require('select2.css');
  require('select2');
  /* 添加ztree引用 */
  require("zTreeStyle.css");
  require("ztreeCore");
  require("ztreeExcheck");
  

  exports.init = function(divId, data) {
    $(document).ready(function() {
      // 蒙版
      loader.loading("数据加载中，请稍后……");
      
      var isvrecord = {};
      if (data)
        isvrecord = data;
      // 能力类型
      var abilityType = "TalksV2";
      // 点击的能力类型的html元素id
      var elementId = "";
      // 判断右侧界面是修改还是新建：true为新建，false为修改
      var newOrUpdate = true;
      // 号码能力表id
      var poolAbilityId;
      
      
      // 加载自定义模板-条件区域
      var template = require("./numberpoolupgradeconf.tpl");
      var Widget = require("widget");
      var Component = Widget.extend({
        template : template
      });
      new Component({
        renderTo : divId
      });
      
      
      var getRelByPoolId = function(poolId){
        var dataObj = {};
        $.ajax({
          url : "/poolnumber/getRelByPoolId.do?poolId="+poolId,
          dataType : "json",
          async: false, 
          delay : 250,
          success : function(json) {
            if(json.flag == '000000'){
              dataObj = json.data;
              
            } else {
            	bootbox.alert("获取数据失败！");
//              oauth2Relogin();                    
            }
          },
          error : function(s) {
//            loader.noloading();
            bootbox.alertTimeout("网络请求失败，请重试！");
          }
        });
        return dataObj;
      };
      
      
      // 右侧，号码能力配置(新建能力)
      var abilityConfNew = function(abilityType) {
        new formcc({
          attrs : {
            title : "新建能力号码关系",
            spansize : 'span12',
            id : "confInfoNewId",
            items : [{
              isText : true,
              label : "手机号码",
              id : 'phone_number',
              name : 'phone_number',
              type : "text",
              style : "width:50%",
              readonly : true,
              value : isvrecord.phone_number
            },/*{
            isText : true,
            label : "能力类型",
            id : 'ability_type',
            name : 'ability_type',
            type : "text",
            style : "width:50%",
            placeholder : "请选择能力类型",
            validations :
            {
                required : true
            }
          },*/{
              isText : true,
              label : "能力账号",
              id : 'charge_number',
              name : 'charge_number',
              type : "text",
              style : "width:50%",
              placeholder : "请输入能力账号",
              validations :
              {
                required : true,
                maxlength : 40
              }
            },{
              isText : true,
              label : "能力密码",
              id : 'charge_key',
              name : 'charge_key',
              type : "text",
              style : "width:50%",
              placeholder : "请输入能力密码",
              validations :
              {
                required : true,
                maxlength : 40
              }
            },{
              isText : true,
              label : "主显号码",
              id : 'display_number',
              name : 'display_number',
              type : "text",
              style : "width:50%",
              placeholder : "请输入主显号码",
              validations :
              {
                required : true,
                maxlength : 25
              }
            },{
              isText : true,
              label : "备用信息1",
              id : 'reserve_column1',
              name : 'reserve_column1',
              type : "text",
              style : "width:50%",
              validations :
              {
                required : false,
                maxlength : 40
              }
            },{
              isText : true,
              label : "备用信息2",
              id : 'reserve_column2',
              name : 'reserve_column2',
              type : "text",
              style : "width:50%",
              validations :
              {
                required : false,
                maxlength : 40
              }
            },{
              isText : true,
              label : "每日限制次数",
              id : 'limit_num',
              name : 'limit_num',
              type : "text",
              style : "width:50%",
              placeholder : "请输入每日限制次数",
              validations :
              {
                required : true
//                isnumber : true
              }
            },{
              isText : true,
              label : "备注信息",
              id : 'comment_info',
              name : 'comment_info',
              type : "text",
              style : "width:50%",
              placeholder : "请输入备注信息",
              validations :
              {
                required : false,
                maxlength : 150
              }
            } ],
            buttons : [ {
              text : "保存",
              id : "btnSaveNew",
              type : "submit",
              style : "btn btn-contrast",
              backgroud : "btn-contrast"
            }, {
              text : "取消",
              id : "btnCancelNew",
              style : "btn",
              type : "button"
            }]
        
          },
          renderTo : "confInfoNew",
          afterRender : function() {
            // 设置title名称样式
            $(".box-header").css({
              "font-size":"15px",
              "font-weight":"bold",
              "line-height":"19px"
            });
            
            loader.noloading();
            
            // 保存按钮操作
            theme.setValidateForm($("#confInfoNewId"), saveActionNew);
            
            // 取消按钮操作
            $('#btnCancelNew').on('click', function() {
              $('#ruleinfo_data_table').hide();
              $('#abilityConfId').hide();
              $('#accountinfo_data_table').show();
              $("#accountForm").show();
              $("#queryAreaId").show();
              return false;
            });
          }
        });
        
      };
    
    
      // 保存按钮操作，右侧，号码能力配置(新建能力)
      var saveActionNew = function() {
        loader.loading("正在为该号码配置所选能力，请稍等……");
        
        var formdata = {
            pool_id : isvrecord.id,
            ability_type : abilityType,// 能力类型，由选择配置的类型提供
            display_number : $("#display_number").val(),
            charge_number : $("#charge_number").val(),
            charge_key : $("#charge_key").val(),
            reserve_column1 : $("#reserve_column1").val(),
            reserve_column2 : $("#reserve_column2").val(),
            comment_info : $("#comment_info").val(),
            limit_num : $("#limit_num").val()
        };
        
         // 提交请求，新建该号码能力配置关系
        $.ajax({
          url : "/poolnumber/doInsertPoolAbility.do",
          dataType : "json",
          data : "data=" + JSON.stringify(formdata),
          type : "POST",
          success : function(json) {
            if(json.flag == '000000'){
//                nav.toPageView("admin/numberpoolupgrade.html");
              ruleAbilityConfInit(abilityType);
              loader.noloading();
            } else {
            	bootbox.alert("新建号码能力失败！");
//                oauth2Relogin();                    
            }
          },
          error : function(s) {
            loader.noloading();
            bootbox.alertTimeout("网络请求失败，请重试！");
          }
        });
        
      };
      
      
      
      // 右侧，号码能力配置(修改能力)
      var abilityConfUpdate = function(isvrecord,poolAbility) {
        new formcc({
          attrs : {
            title : "修改能力号码关系",
            spansize : 'span12',
            id : "confInfoUpdateId",
            items : [{
              isText : true,
              label : "手机号码",
              id : 'phone_number1',
              name : 'phone_number',
              type : "text",
              style : "width:50%",
              readonly : true,
              value : isvrecord.phone_number
            },{
              isText : true,
              label : "能力账号",
              id : 'charge_number1',
              name : 'charge_number',
              type : "text",
              style : "width:50%",
              placeholder : "请输入能力账号",
              value : poolAbility.charge_number,
              validations :
              {
                  required : true,
                  maxlength : 40
              }
            },{
              isText : true,
              label : "能力密码",
              id : 'charge_key1',
              name : 'charge_key',
              type : "text",
              style : "width:50%",
              placeholder : "请输入能力密码",
              value : poolAbility.charge_key,
              validations :
              {
                  required : true,
                  maxlength : 40
              }
            },{
              isText : true,
              label : "主显号码",
              id : 'display_number1',
              name : 'display_number',
              type : "text",
              style : "width:50%",
              placeholder : "请输入主显号码",
              value : poolAbility.display_number,
              validations :
              {
                  required : true,
                  maxlength : 25
              }
            },{
              isText : true,
              label : "备用信息1",
              id : 'reserve_column11',
              name : 'reserve_column1',
              type : "text",
              style : "width:50%",
              value : poolAbility.reserve_column1,
              validations :
              {
                required : false,
                maxlength : 40
              }
            },{
              isText : true,
              label : "备用信息2",
              id : 'reserve_column21',
              name : 'reserve_column2',
              type : "text",
              style : "width:50%",
              value : poolAbility.reserve_column2,
              validations :
              {
                required : false,
                maxlength : 40
              }
            },{
              isText : true,
              label : "每日限制次数",
              id : 'limit_num1',
              name : 'limit_num',
              type : "text",
              style : "width:50%",
              placeholder : "请输入每日限制次数",
              value : poolAbility.limit_num,
              validations :
              {
                  required : true
              }
            },{
              isText : true,
              label : "备注信息",
              id : 'comment_info1',
              name : 'comment_info',
              type : "text",
              style : "width:50%",
              placeholder : "请输入备注信息",
              value : poolAbility.comment_info,
              validations :
              {
                  required : false,
                  maxlength : 150
              }
            } ],
            buttons : [ {
              text : "保存",
              id : "btnSaveUpdate",
              type : "submit",
              style : "btn btn-contrast",
              backgroud : "btn-contrast"
            }, {
              text : "取消",
              id : "btnCancelUpdate",
              style : "btn",
              type : "button"
            }]
    
          },
          renderTo : "confInfoUpdate",
          afterRender : function() {
            // 设置title名称样式
            $(".box-header").css({
              "font-size":"15px",
              "font-weight":"bold",
              "line-height":"19px"
            });
            
            loader.noloading();
            
            poolAbilityId = poolAbility.id;
            // 保存按钮操作
            theme.setValidateForm($("#confInfoUpdateId"), saveActionUpdate);
              
            // 取消按钮操作
            $('#btnCancelUpdate').on('click', function() {
              $('#ruleinfo_data_table').hide();
              $('#abilityConfId').hide();
              $('#accountinfo_data_table').show();
              $("#accountForm").show();
              $("#queryAreaId").show();
            });
          }
        });
      };
      
      // 保存按钮操作，右侧，号码能力配置(修改能力)
      var saveActionUpdate = function() {
        loader.loading("正在为该号码配置所选能力，请稍等……");
        if($("#limit_num1").val()==''){
        	bootbox.alert("limit_num值不能为空!!!");
        	return;
        }
        
        var formdataUpdate = {
            id : poolAbilityId,
            pool_id : isvrecord.id,
            ability_type : abilityType,// 能力类型，由选择配置的类型提供
            display_number : $("#display_number1").val(),
            charge_number : $("#charge_number1").val(),
            charge_key : $("#charge_key1").val(),
            reserve_column1 : $("#reserve_column11").val(),
            reserve_column2 : $("#reserve_column21").val(),
            comment_info : $("#comment_info1").val(),
            limit_num : $("#limit_num1").val()
        };  
        // 提交请求，修改该号码能力配置关系
         $.ajax({
          url : "/poolnumber/doEditPoolAbility.do",
          dataType : "json",
          data : "data=" + JSON.stringify(formdataUpdate),
          type : "POST",
          success : function(json) {
            if(json.flag == '000000'){
//              nav.toPageView("admin/numberpoolupgrade.html");
              
              ruleAbilityConfInit(abilityType);
              loader.noloading();
            } else {
            	bootbox.alert("修改号码能力失败！");
//              oauth2Relogin();                    
            }
          },
          error : function(s) {
            loader.noloading();
            bootbox.alertTimeout("网络请求失败，请重试！");
          }
        });
        
      };
      
      
      
   // 左侧，能力显示
      // ztree使用
      var setting = {
        view: {
          dblClickExpand: false,
          showLine: true,
          selectedMulti: false
        },
        data: {
          /*key: {
            title:"t"
          },*/
          simpleData: {
            enable: true
          }
        },
        callback: {
          beforeClick: beforeClick,
          onClick: onClick
        }
      };
      
      // 获取ztree中zNodes的数据
      var getZNodes = function(){
        // 返回ztree中zNodes的数据poolnumber
        var zNodes = [];
        $.ajax ({
          url : "/rule/queryAllRule.do",
          dataType : 'json',
          async: false, 
          delay : 250,
          success : function(data) {
            // 获取能力类型相关数据
            zNodes = data.data.items;
          },
          cache : true
        });
        
        return zNodes;
      }
      var zNodes = getZNodes();

      function beforeClick(treeId, treeNode, clickFlag) {
        return (treeNode.click != false);
      }
      function onClick(event, treeId, treeNode, clickFlag) {
        // 点击父节点不进行以下操作
        if(treeNode.pId != null){
          // 蒙版
          loader.loading("数据加载中，请稍后……");
          
          // 获取当前点击的元素id；eq(0)是取第一个jq元素
          elementId = $(this).eq(0).attr('id');
          // 能力类型
          abilityType = treeNode.remarks;
          
          // 获取右侧号码能力配置的相关数据
          var mydataClick = getRelByPoolId(isvrecord.id);
          
          // 若数据库中存在配置信息，则判断显示右侧号码能力配置的页面：新建/修改
          if(mydataClick.totalItemNum != 0){
            var items = mydataClick.items;
            var poolAbility = null;
            // 判断点击的能力类型，在数据库库中是否存在
            var ability_exist = false;
            for(var i=0;i<items.length;i++){
              var bean = items[i];
              if(abilityType == bean.ability_type){
                ability_exist = true;
                poolAbility = bean;
                break;
              }
            }
            
            // 如果点击的能力类型，在数据库中存在数据，则显示右侧新建号码能力配置；否则为右侧修改号码能力配置
            if(ability_exist){
              abilityConfUpdate(isvrecord,poolAbility);
              // 修改号码能力配置的title
              $("#confInfoUpdate .box .box-header .title").text("修改能力号码关系-"+treeNode.name);
              $("#confInfoUpdate").show();
              $("#confInfoNew").hide();
              // 判断右侧界面是修改还是新建：true为新建，false为修改
              newOrUpdate = true;
            }else{
              abilityConfNew(abilityType);
              $("#confInfoNew .box .box-header .title").text("新建能力号码关系-"+treeNode.name);
              $("#confInfoNew").show();
              $("#confInfoUpdate").hide();
              newOrUpdate = false;
            }
          }
          // 不存在，则显示右侧新建号码能力配置
          else{
            abilityConfNew(abilityType);
            $("#confInfoNew .box .box-header .title").text("新建能力号码关系-"+treeNode.name);
            $("#confInfoNew").show();
            $("#confInfoUpdate").hide();
            newOrUpdate = true;
          }
          loader.noloading();
        }
      }
      
      // 左侧，能力显示
      $.fn.zTree.init($("#tree"), setting, zNodes);
      
      
      // 左边能力类型与右边能力配置，调整整体关系
      var ruleAbilityConfInit = function(ability_type_init) {
        // 获取ztree对象
        var treeObj = $.fn.zTree.getZTreeObj("tree");
        // 获取节点中的相关数据
        var node_init = treeObj.getNodeByParam("remarks", ability_type_init);
        // 将ztree中的该节点选中
        treeObj.selectNode(node_init);
        
        // 获取右侧号码能力配置的相关数据
        var mydataInit = getRelByPoolId(isvrecord.id);
        
        // 若数据库中存在配置信息，则判断显示右侧号码能力配置的页面：新建/修改
        if(mydataInit.totalItemNum > 0){
          var items = mydataInit.items;
          var poolAbility = null;
          // 判断点击的能力类型，在数据库库中是否存在
          var ability_exist = false;
          
          // 对于已配置的能力，设置对勾符号
          for(var i=0;i<items.length;i++){
            var bean = items[i];
            // 获取节点中的相关数据
            var node = treeObj.getNodeByParam("remarks", bean.ability_type);
            // 获取html元素id
            var content = $("#"+node.tId+"_span");
            // 若存在则删除b元素内容
            content.parent().next("b").remove();
            // 为已配置能力的添加对勾
            content.parent().parent().append("<b style='font-size:120%;font-weight:bold;color:red;margin-left:20px;'>✔</b>");
          }
          
          // 判断初始化的能力类型，是否配置了关系
          for(var i=0;i<items.length;i++){
            var bean = items[i];
            if(ability_type_init == bean.ability_type){
              // 数据库中已存在该能力类型的相关数据
              ability_exist = true;
              // 将该数据保存
              poolAbility = bean;
              break;
            }
          }
          
          // 如果点击的能力类型，在数据库中存在数据，则显示右侧新建号码能力配置；否则为右侧修改号码能力配置
          if(ability_exist){
            abilityConfUpdate(isvrecord,poolAbility);
            // 修改号码能力配置的title
            $("#confInfoUpdate .box .box-header .title").text("修改能力号码关系-"+node_init.name);
            $("#confInfoNew").hide();
            $("#confInfoUpdate").show();
          }else{
            abilityConfNew(abilityType);
            $("#confInfoNew .box .box-header .title").text("新建能力号码关系-"+node_init.name);
            $("#confInfoNew").show();
            $("#confInfoUpdate").hide();
          }
        }
        // 不存在，则显示右侧新建号码能力配置
        else{
          abilityConfNew(abilityType);
          $("#confInfoNew .box .box-header .title").text("新建能力号码关系-"+node_init.name);
          $("#confInfoNew").show();
          $("#confInfoUpdate").hide();
        }
        
      };
      
      // 默认打开时为IMS多方通话的配置
      ruleAbilityConfInit("TalksV2");
      
      
    });
  };
});
